Spring Boot এবং Spring Data JPA সহজেই ডেটাবেসে Pagination (ডেটা পৃষ্ঠায় বিভক্ত) এবং Sorting (ডেটা সাজানো) অপারেশন সাপোর্ট করে। Pagination ডেটা ছোট ছোট অংশে ভাগ করে প্রদর্শন করে, যা পারফরম্যান্স উন্নত করে। Sorting ডেটাকে নির্দিষ্ট ক্রমে সাজিয়ে প্রদর্শন করতে সাহায্য করে।
Pagination এবং Sorting এর জন্য প্রয়োজনীয় ডিপেনডেন্সি
Maven ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
application.properties ফাইল কনফিগার করুন:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
Entity ক্লাস তৈরি
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
JpaRepository ইন্টারফেস তৈরি
Spring Data JPA-এর PagingAndSortingRepository বা JpaRepository ইন্টারফেস ব্যবহার করে Pagination এবং Sorting এর সুবিধা পাওয়া যায়।
import org.springframework.data.repository.PagingAndSortingRepository;
public interface ProductRepository extends PagingAndSortingRepository<Product, Long> {
}
Controller ক্লাস তৈরি
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductRepository repository;
// Pagination
@GetMapping("/paginate")
public Page<Product> getPaginatedProducts(@RequestParam int page, @RequestParam int size) {
Pageable pageable = PageRequest.of(page, size);
return repository.findAll(pageable);
}
// Sorting
@GetMapping("/sort")
public Iterable<Product> getSortedProducts(@RequestParam String sortBy, @RequestParam String direction) {
Sort sort = direction.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
return repository.findAll(sort);
}
// Pagination with Sorting
@GetMapping("/paginateAndSort")
public Page<Product> getPaginatedAndSortedProducts(
@RequestParam int page,
@RequestParam int size,
@RequestParam String sortBy,
@RequestParam String direction
) {
Sort sort = direction.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
Pageable pageable = PageRequest.of(page, size, sort);
return repository.findAll(pageable);
}
}
API সমূহ এবং তাদের ব্যবহার
Pagination API
- GET:
/products/paginate?page=0&size=5- প্রথম পৃষ্ঠা (Page 0), প্রতি পৃষ্ঠায় ৫টি আইটেম।
Sorting API
- GET:
/products/sort?sortBy=name&direction=ascnameএর উপর ভিত্তি করে Ascending Order।
- GET:
/products/sort?sortBy=price&direction=descpriceএর উপর ভিত্তি করে Descending Order।
Pagination এবং Sorting একত্রে
- GET:
/products/paginateAndSort?page=0&size=5&sortBy=price&direction=asc- প্রতি পৃষ্ঠায় ৫টি আইটেম,
priceএর উপর ভিত্তি করে Ascending Order।
- প্রতি পৃষ্ঠায় ৫টি আইটেম,
উদাহরণ ডেটা
যদি নিচের ডেটাগুলো ডেটাবেসে থাকে:
| ID | Name | Price |
|---|---|---|
| 1 | Product A | 100.0 |
| 2 | Product B | 150.0 |
| 3 | Product C | 120.0 |
| 4 | Product D | 200.0 |
| 5 | Product E | 180.0 |
| 6 | Product F | 170.0 |
Pagination Query (page=0, size=3):
[
{ "id": 1, "name": "Product A", "price": 100.0 },
{ "id": 2, "name": "Product B", "price": 150.0 },
{ "id": 3, "name": "Product C", "price": 120.0 }
]
Sorting Query (sortBy=price, direction=asc):
[
{ "id": 1, "name": "Product A", "price": 100.0 },
{ "id": 3, "name": "Product C", "price": 120.0 },
{ "id": 2, "name": "Product B", "price": 150.0 },
...
]
সারাংশ
Spring Boot এবং Spring Data JPA এর Pagination এবং Sorting ফিচার ডেটা ম্যানেজমেন্টকে আরও কার্যকর ও গতিশীল করে। এর মাধ্যমে বড় ডেটাবেসে কার্যক্ষমতার সাথে ডেটা প্রদর্শন এবং সাজানো যায়। এগুলো সহজে কনফিগার এবং API টেস্টিংয়ের জন্য খুবই সহায়ক।